//
/***
 * 高阶函数的概念
 * 1. 一个函数返回一个函数
 * 2. 一个函数参数可以接收一个函数
 *
 * 两个条件满足任何一个都是高阶函数
 *
 * 结论:
 * 1. 如果我们想给函数进行拓展 可以使用高阶函数
 *
 *
 * 什么叫闭包
 * 函数的定义是有作用于概念的, 一个函数定义的作用域和执行的作用域 肯定会出现闭包
 */

(function () {
    return function () {

    }
})

// 拓展方法 会用到高阶函数

function core(...args) {
    // ..
    console.log('core', ...args)
    // ..
}

// 给core函数增加一些额外的逻辑 但是不能更改核心代码

Function.prototype.before = function (cb) {
    // this = core
    // 剩余运算符 可以吧多个参数转化成数组
    return (...args) => {  // newCore
        cb()
        // 拓展运算符
        this(...args)
    }
}

let newCore = core.before(() => {
    console.log('bofore')
})

newCore('a', 'b')


